fn main() {

    //基础数据类型：bool、char、数字类型、数组、自适应类型、元祖
    //结构体、枚举：后续章节说
    //字符串类型后面章节说

   // bool类型
   let is_true: bool = true;
   let is_false: bool = false;

   println!(" bool: is_true = {is_true}\n bool: is_false = {is_false}");

   // char类型, 都是是32位的
   // char 只能输入单引号且只允许输入一个字符，超过会报错
   let a = 'a';
   let b: char = '😊';
   let c = '中';
   let d = '2';
   println!(" char: a = {a}\n char: b = {b}\n char: c = {c}\n char: d = {d}");

   // 数字类型 （有符号：i8、i6、i32、i64）（无符号：u8、u6、u32、u64）（浮点型：f32、 f64）
   let i: i32 = -12;
   println!("有符号32位: i = {i}");
   let u: u32 = 12;
   println!("无符号32位: u = {u}");

   let f: f32 = 1.32;
   println!("浮点型32位: f = {f}");

   let f1: f64 = 1.64;
   println!("浮点型64位: f1 = {f1}");

   // 自适应类型isize、usize
   println!("usize机器的最大值: {}", usize::max_value());
   println!("isize机器的最大值: {}", isize::max_value());

   // 数组 [Type: size]
   let arr: [u32; 5] = [1, 2, 3, 4, 5];
   println!("arr数组: {}", arr[0]);

   // 这里调用的是show方法中定义的方法，size也是数组类型的一部分
   let arr1: [u32; 3] = [1, 2, 3];
   show(arr1);

   // 元祖，是一个复合类型
   // 第一种写法
   let tup: (i32, f32, char) = (-3, 1.3, '😊');
   println!("tup元祖的值: {}", tup.0);
   println!("tup元祖的值: {}", tup.1);
   println!("tup元祖的值: {}", tup.2);
   println!("------------------------------");
   // 第二种写法
   let tup1 = (-3, 1.3, '😊');
   println!("tup1元祖的值: {}", tup1.0);
   println!("tup1元祖的值: {}", tup1.1);
   println!("tup1元祖的值: {}", tup1.2);
   println!("------------------------------");

   // 元祖拆x
   let (x, y, z) = tup1;
   println!("拆解后的元祖x: {}", x);
   println!("拆解后的元祖y: {}", y);
   println!("拆解后的元祖z: {}", z);
   println!("------------------------------");
}

// 用一个方法来说明
fn show(arr:[u32; 3]){
    println!("------------------------------");
    for i in &arr {
        println!("arr方法中的数组值是: {}", i);
    }
    println!("------------------------------");
}